import vdk from 'vdk'
import Webapi from './core/Webapi.js'
import conf from '@biz/config/conf'

// 实例化Webapi对象
const _webapi = new Webapi(Object.assign({}, conf.webapi._defaults));

/**
 *发起单个API服务请求
 *  apiCode ： 构建名.方法名
 *  data ： 数据源
 *  options ： 其他参数（具体参数参考readme文档）
 webapi.exe({...}).then(data => {
 * ...
 *  })
 */
const exe = (apiCode, data, options) => {
  return _webapi.exe(apiCode, data, options);
}

/**
 *发起多个API服务请求
 * let requestA = webapi.exe({...});
 * let requestB =webapi.exe({...});
 * webapi.all([requestA, requestB]).then(data => {
 *  let dataA = data[0];
 *  let dataB = data[1];
 * });
 */
const all = (...apis) => {
  return vdk.vs.batchRequest(apis);
}

//设置全局参数（具体参数参照readme文档）
const set = (config) => {
  _webapi.config = config;
}

/**
 * 扩展参数
 * let requestA = webapi.exe({...});
 * let requestB =webapi.exe({...});
 * webapi.all([requestA, requestB]).then(vs.spread((dataA, dataB) => {
 *  // 直接使用dataA, dataB
 * }));
 */
const spread = (callback) => (arr) => callback.apply(null, arr);

//对定义的方法进行输出
export default {
  set,
  exe,
  all,
  spread
}
